import scrapy
from itemloaders.processors import TakeFirst
from scrapy.loader import ItemLoader

from csdnpersionalblog.items import CsdnpersionalblogItem

'''
爬取目标：csdn上的个人博客
爬取信息-item：
1、博客标题：  title
2、发布时间：   publish
3、点赞量：      approval
4、踩:        unlike
5、评论量：      comment
6、收藏量：      collection

'''


class PblogSpider(scrapy.Spider):
    name = 'pblog2'
    allowed_domains = ['blog.csdn.net']
    start_urls = ['https://blog.csdn.net/gaogzhen/article/list/1']

    def parse(self, response):
        # 提取全部连接
        links = response.css('#articleMeList-blog>.article-list h4>a::attr(href)').getall()
        # 解析每个连接详情页
        for link in links:
            yield response.follow(link, self.parse_detail)

    def parse_detail(self, response):
        # 构建itemloader
        loader = ItemLoader(item=CsdnpersionalblogItem(), response=response)
        # 解析文章标题
        loader.add_css('title', 'h1#articleContentId::text')
        # 解析发布时间
        # 获取的时间有额外的信息需要正则过滤下
        loader.add_css('publish', '.bar-content>span.time::text', TakeFirst(), re='于 (.*) 发布')
        # 解析点赞
        loader.add_css('approval', 'span#spanCount::text')
        # 解析踩
        loader.add_css('unlike', 'span#unlikeCount::text')
        # 解析评论
        loader.add_css('comment', 'li.tool-item-comment a span.count::text')
        # 解析收藏
        loader.add_css('collection', 'span#get-collection::text')

        item = loader.load_item()
        print(item)
